import { createRouter, createWebHistory } from 'vue-router'
import store from './store'

import Home from './views/Home.vue'
import Signup from './views/Signup.vue'
import Login from './views/Login.vue'
import Column from './views/ColumnDetail.vue'
import Post from './views/ColumnPostDetail.vue'
import Create from './views/CreatePost.vue'
import Edit from './views/EditProfile.vue'
import axios from 'axios'


const routerHistory = createWebHistory()
const router = createRouter({
  history: routerHistory,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/signup',
      name: 'signup',
      component: Signup,
      //登录之后跳转首页
      meta: { redirectAlreadyLogin: true }
    },
    {
      path: '/login',
      name: 'login',
      component: Login,
      //登录之后跳转首页
      meta: { redirectAlreadyLogin: true }
    },
    {
      path: '/create',
      name: 'create',
      component: Create,
      meta: { requiredLogin: true }
    },
    {
      path: '/column/:id',
      name: 'column',
      component: Column
    },
    {
      path: '/post/:id',
      name: 'Post',
      component: Post
    },
    {
      path: '/edit',
      name: 'Edit',
      component: Edit,
      meta: { requiredLogin: true }
    }
  ]
})
router.beforeEach((to, from, next) => {
  // if (!currentUser.value.isLogin && token.value) {

  // }
  const { token, user } = store.state
  const { redirectAlreadyLogin, requiredLogin } = to.meta
  if (user.isLogin) {
    if (redirectAlreadyLogin) {
      next('/')
    } else {
      next()
    }
  } else {
    if (token) {
      // 设置Token请求头
      axios.defaults.headers.common.Authorization = `Bearer ${token}`
      // 此时Token请求头已存在,发送请求获取用户信息
      store.dispatch('fetchCurrentUser').then(() => {
        if (redirectAlreadyLogin) {
          next('/')
        } else {
          next()
        }
      }).catch(e => {
        // 若发送请求获取用户信息失败,则清楚token后返回登录页面
        console.error(e);
        // store内还存有Token,删除本地存储不顶用
        // localStorage.removeItem(token)
        store.commit('logout')
        next('/login')
      })
    } else {
      if (requiredLogin) {
        next('/login')
      } else {
        next()
      }

    }

  }


})

export default router

// 常见状态码
// 200 OK - [GET]：服务器成功返回用户请求的数据
// 201 CREATED - [POST/PUT/PATCH]：用户新建或修改数据成功。
// 204 NO CONTENT - [DELETE]：用户删除数据成功。
// 401 Unauthorized - [*]：表示用户没有权限（令牌、用户名、密码错误）。
// 403 Forbidden - [*] 表示用户得到授权（与401错误相对），但是访问是被禁止的。
// 404 NOT FOUND - [*]：用户发出的请求针对的是不存在的记录，服务器没有进行操作。